Jump To:
Technical Q&As
The I/O Kit is the device driver subsystem of Mac OS X, and is part of Darwin. The I/O Kit provides a set of C functions and C++ classes, including object-oriented abstractions common to various families of drivers. In addition, for many device types, the I/O Kit provides a device interface that enables an application to communicate with and control a device from user space.

Device Drivers Resources
A guided introduction and learning path for developers writing software that accesses devices in Mac OS X.   Essential information for developers working with device drivers.   Descriptions of driver interface elements, by library and framework.
Document Descriptions
On Off
Display

Sorted by
Title
Sort by
Topic
Sort by
Date
The AAPL, slot-name property and PCI (HTML) ()
HW61: Discusses the use of the AAPL,slot name property for PCI
Open Firmware, PCI and PC Card 1999-04-19
Adding dependencies with kmodload (HTML)
QA1097: Illustrates how to specify dependencies when using kmodload.
ATA, Bluetooth, Ethernet, FireWire, Mass Storage Devices, Networking, PCI and PC Card, SCSI, Serial, USB 2001-12-05
ANSI SCSI Standards (HTML)
Deprecated - DV03: Describes past Macintosh systems that did not fully support the ANSI SCSI-1 standard.
ATA, Mass Storage Devices, PCI and PC Card, SCSI 1995-07-01
Are interrupts enabled while Open Firmware is running? (HTML) ()
HW44: Explains that interrupts are disabled when Open Firmware is running.
PCI and PC Card 1999-02-15
Are the Name Registry device tree nodes unique? (HTML)
Deprecated - HW64: Discusses whether Name Registry nodes copied from the Open Firmware device tree are unique.
Music & Audio, Networking, Open Firmware, PCI and PC Card, Printing 1999-10-11
Available FireWire Isochronous Bandwidth (HTML)
QA1356: Discusses attempting to "pre-flight" an isochronous bandwidth allocation request by reading the currently available bandwidth.
FireWire, Music & Audio 2004-07-07
Bluetooth Radio Power Class for Apple Systems (HTML) ()
QA1278: Notes Preferred Bluetooth Transmitter Characteristics for products designed for Apple Systems.
Bluetooth 2003-08-06
Booting after invoking the Open Firmware user interface (HTML) ()
HW48: Tells how to boot a system after entering the Open Firmware user interface.
Mass Storage Devices 1999-02-15
Can you explain the words "begin" and "again"? (HTML)
HW70: Explains the Forth looping words "begin" and "again" and how to escape such a loop.
Open Firmware, PCI and PC Card 1999-10-11
Changing the configuration variable in Open Firmware (HTML) ()
HW40: Tells how to change the configuration variable in Open Firmware.
Open Firmware 1999-02-15
Changing the TCP Window Size (HTML)
NW47: Describes how to change the TCP window size in Open Transport.
Ethernet, Networking 1997-03-14
Checking for the Printer Driver (HTML)
DV42: Describes a legacy Mac OS technique avoiding system hangs when using serial drivers on USB systems.
Printing 2000-06-19
The "chosen" node in the device tree (HTML)
HW88: Describes how to find the "chosen" node in the Open firmware device tree.
Ethernet, Networking, PCI and PC Card 2000-09-05
Common QA and Roadmap for USB Software Development on Mac OS X (HTML)
QA1370: Roadmap for development of USB Software on Mac OS X and some Common Questions and Answers
USB 2004-09-22
Converting a numeric string to a number under Forth (HTML) ()
HW52: Demonstrates numeric string conversion in Forth.
Open Firmware 1999-03-29
Detecting a CD-ROM (HTML) ()
DV18: Demonstrates CD-ROM drive detection.
ATA, Mass Storage Devices, SCSI 1997-01-31
Determining Open Firmware configuration variables (HTML) ()
HW56: Discusses how to determine the Open Firmware variables on a system.
PCI and PC Card 1999-03-29
Determining Open Firmware version (HTML)
HW100: Demonstrates how to find out the version of Open Firmware on your Macintosh.
PCI and PC Card 2000-10-06
Difference between an Open Firmware word and method (HTML) ()
HW46: Describes the differences between an Open Firmware word and an Open Firmware method.
Open Firmware, PCI and PC Card 1999-02-15
Difference between using Restart or Shut Down in the Finder's Special menu in Open Firmware (HTML) ()
HW47: Explains the differences between using Restart or Shut Down on Open Firmware
PCI and PC Card 1999-02-15
Disabling a Processor on a Multiprocessor System (HTML) ()
QA1141: Describes how to disable a processor on a multiprocessor system for testing purposes.
Open Firmware 2002-05-22
Displaying PCI Configuration Registers contents in Open Firmware (HTML)
QA1036: Demonstrates how to display PCI Configuration Resister contents in Open Firmware.
PCI and PC Card 2001-05-18
Do PowerBooks have a PCI bus? (HTML) ()
HW43: Explains that a Powerbook has a PCI bus.
PCI and PC Card 1999-02-15
The dreaded "incompatible flag -framework" error (HTML)
QA1096: Explains how to eliminate the incompatible flag -framework error in Project Builder.
ATA, Ethernet, Fibre Channel, FireWire, Mass Storage Devices, Networking, PCI and PC Card, SCSI, Serial, USB 2001-12-05
Driver Gestalt & Icon Services (HTML) ()
DV37: Describes the interaction of Driver Gestalt & Icon Services
Human Interface Device & Force Feedback 1999-10-05
Energy Star PCI Device (HTML) ()
QA1108: Provides useful information for developers of Energy Star-compliant PCI devices.
PCI and PC Card 2002-01-15
Expansion ROM device properties (HTML) ()
HW50: Describes the Open Firmware properties that should be included in a boot device's expansion ROM.
ATA, Bluetooth, Ethernet, Fibre Channel, FireWire, Human Interface Device & Force Feedback, Mass Storage Devices, Music & Audio, Networking, PCI and PC Card, Printing, Scanners, SCSI, Serial, Still Cameras, USB 1999-03-29
Generating an NMI Without a Programmer's Switch (HTML) ()
QA1264: Explains how to generate a non-maskable interrupt (NMI) on CPUs without programmer's switches.
AirPort/802.11, ATA, Bluetooth, Ethernet, Fibre Channel, FireWire, Human Interface Device & Force Feedback, Mass Storage Devices, Music & Audio, Networking, PCI and PC Card, Printing, Scanners, SCSI, Serial, Still Cameras, USB 2004-04-26
Getting a List of Drivers & LUNs (logical unit numbers) (HTML)
Deprecated - DV04: Describes a legacy Mac OS technique for obtaining a list of SCSI Parallel drivers, devices, and LUNs.
ATA, Mass Storage Devices, SCSI 1995-07-01
Getting a Packet Trace (HTML) ()
QA1176: Lists tools available for looking at the network packets on the wire.
AirPort/802.11, Networking 2004-07-13
Getting started with Forth (HTML) ()
HW53: Describes where FCode driver developers can get information about the Forth programming language.
ATA, Bluetooth, Ethernet, Fibre Channel, FireWire, Human Interface Device & Force Feedback, Mass Storage Devices, Music & Audio, Networking, PCI and PC Card, Printing, Scanners, SCSI, Serial, Still Cameras, USB 1999-03-29
HID Manager Event Data Underruns (HTML)
QA1038: Explains how to correctly handle HID Manager event queue data underruns.
Human Interface Device & Force Feedback, USB 2001-06-13
How can I tell if a PCI device has on board I/O space? (HTML)
QA1287: Demonstrates "how to" tell if a PCI device has on board I/O space.
PCI and PC Card 2003-09-24
How many PCI header types exist today? (HTML)
HW92: Briefly describes the three PCI header types defined in the PCI 2.2 specification.
PCI and PC Card 2000-09-05
How to use the OT modem script engine (HTML) ()
Deprecated - NW50: Shows how to use the Open Transport modem script engine.
Networking 1997-07-11
if and then in Forth (HTML) ()
HW54: Using the Forth word "if" requires a "then".
Human Interface Device & Force Feedback 1999-03-29
Installing an I/O Kit KEXT Without Rebooting (HTML)
QA1319: Describes the state of the art of installing I/O Kit kernel extensions (KEXTs) without requiring a restart.
AirPort/802.11, ATA, Bluetooth, Ethernet, Fibre Channel, FireWire, Mass Storage Devices, Music & Audio, Networking, PCI and PC Card, SCSI, Serial, USB 2003-10-28
Installing smart card reader drivers (HTML)
QA1359: Updates obsolete information contained in the pcscd(8) man page on Mac OS X Jaguar and Panther.
Serial, USB 2004-08-30
IODeviceTree & the IORegistry (HTML) ()
QA1120: Describes the IODeviceTree plane in the Mac OS X IORegistry.
ATA, Bluetooth, Ethernet, Fibre Channel, FireWire, Human Interface Device & Force Feedback, Mass Storage Devices, Music & Audio, Networking, Open Firmware, PCI and PC Card, Printing, Scanners, SCSI, Serial, Still Cameras, USB 2002-02-13
IOKit Framework Headers (HTML) ()
QA1107: Describes the differences between the headers in IOKit.framework and the I/O Kit headers in Kernel.framework.
AirPort/802.11, ATA, Bluetooth, Ethernet, Fibre Channel, FireWire, Human Interface Device & Force Feedback, Mass Storage Devices, Music & Audio, Networking, PCI and PC Card, Printing, Scanners, SCSI, Serial, Still Cameras, USB 2002-01-15
IOLog and Interrupt Context (HTML) ()
QA1100: Describes when IOKit runs at primary (hardware) interrupt context.
PCI and PC Card 2002-02-13
Is the Open Firmware device tree object oriented? (HTML)
HW80: Discusses the object-oriented attributes of the Open Firmware device tree.
ATA, Bluetooth, Ethernet, Fibre Channel, FireWire, Human Interface Device & Force Feedback, Mass Storage Devices, Music & Audio, Networking, PCI and PC Card, Printing, Scanners, SCSI, Serial, Still Cameras, USB 1999-11-15
Issues with boot time KEXT loading (HTML) ()
QA1087: Explains how to solve problems with loading KEXTs at boot time.
ATA, Bluetooth, Ethernet, FireWire, Human Interface Device & Force Feedback, Networking, PCI and PC Card, SCSI, Serial, USB 2004-01-15
Legacy Devices (HTML)
HW84: Discusses why legacy devices with hard-wired I/O addresses may not work properly with Open Firmware.
PCI and PC Card 2000-03-20
Making sense of IOKit error codes (HTML) ()
QA1075: Explains how to interpret I/O Kit error codes.
ATA, Bluetooth, Ethernet, FireWire, Networking, PCI and PC Card, SCSI, Serial, USB 2002-02-07
Mapping kernel memory to user space on Mac OS X 10.2 (HTML) ()
QA1197: Describes a change to mapping kernel memory to user space affecting Mac OS X 10.2 and later.
AirPort/802.11, ATA, Bluetooth, Ethernet, Fibre Channel, FireWire, Mass Storage Devices, Music & Audio, Networking, PCI and PC Card, Scanners, SCSI, Serial, USB 2002-09-13
New PPD keywords available in Mac OS X version 10.3 (HTML)
QA1352: Describes the new PPD keywords available for CUPS filters in Mac OS X 10.3.
Printing 2004-05-26
Open Firmware and the devalias node (HTML)
HW95: Describes why the contents of the Open Firmware devalias node varies between Macintosh models.
ATA, FireWire, Human Interface Device & Force Feedback, Mass Storage Devices, PCI and PC Card, SCSI, USB 2000-09-05
Open Firmware device tree nodes (HTML)
HW86: Explains the usage of the "@n" notation in Open Firmware device tree nodes.
PCI and PC Card 2000-09-05
Open Firmware Memory bus speed (HTML)
HW97: Describes a method to display memory bus speed for G3 or G4 Macintosh in Open Firmware.
PCI and PC Card 2000-09-22
OTScheduleDeferredTask When Task Running (HTML) ()
NW52: Describes what happens when you use OTScheduleDefferedTask to schedule a task that is running.
Networking 1997-10-13
The "packages" node in the device tree (HTML)
HW90: Describes the "packages" node in the Open Firmware device tree.
ATA, Bluetooth, Ethernet, Fibre Channel, FireWire, Human Interface Device & Force Feedback, Mass Storage Devices, Music & Audio, Networking, PCI and PC Card, Printing, Scanners, SCSI, Serial, Still Cameras, USB 2000-09-05
PCI address/data stepping (HTML)
HW94: Explains that Apple does not support PCI address/data stepping.
PCI and PC Card 2000-09-05
PCI bus on the iMac (HTML) ()
HW42: Explains that the iMac has a PCI bus even though it has no expansion slots.
PCI and PC Card 1999-02-15
PCI Bus? (HTML)
QA1104: Answers the question, "Do all Macintosh computers have a PCI bus?"
PCI and PC Card 2001-12-21
PCI Header types (HTML)
HW78: Describes the three required types of PCI headers to be provided in its configuration header space.
PCI and PC Card 1999-11-15
PCI SIG (HTML) ()
HW55: Describes the meaning of the acronym PCI SIG.
PCI and PC Card 1999-03-29
PCI/PCI-X slots on the Power Mac G5 (HTML)
QA1307: Discusses installing PCI/PCI-X cards of different speeds in the Power Mac G5.
PCI and PC Card 2003-09-30
Power Management; Policy Maker vs. Power Controller (HTML) ()
QA1121: Describes the differences between a Power Management Policy Maker and a Power Management Power Controller.
AirPort/802.11, ATA, Bluetooth, Ethernet, Fibre Channel, FireWire, Human Interface Device & Force Feedback, Mass Storage Devices, Music & Audio, Networking, PCI and PC Card, Printing, Scanners, SCSI, Serial, Still Cameras, USB 2002-02-13
Retain Counts of io_object_t Objects in IOKit.framework (HTML) ()
QA1195: Distinguishes between the retain counts of an I/O Kit kernel object and its io_object_t user space proxy.
FireWire, Human Interface Device & Force Feedback, Mass Storage Devices, Music & Audio, Printing, Scanners, SCSI, Still Cameras, USB 2002-09-04
Sample code for allocating an amount of dictionary space (HTML)
HW71: Discusses the allocation and the setting of memory for Dictionary space in Open Firmware.
PCI and PC Card 1999-10-11
SCSI ID from vRefNum (HTML) ()
DV29: Legacy Mac OS technique for identifying the ID of a SCSI Parallel device containing a specified disk volume.
Mass Storage Devices, SCSI 1997-05-23
A SCSI little secret (HTML)
HW81: Details what to expect when accessing the motherboard SCSI bus on the Blue & White G3.
SCSI 1999-12-20
SCSIAction and IOSCSIUserClient on Mac OS X 10.2 (HTML) ()
QA1201: Describes migrating to a new API for SCSI Parallel devices starting with Mac OS X 10.2.
Fibre Channel, FireWire, Mass Storage Devices, Printing, Scanners, SCSI, Still Cameras, USB 2002-09-13
SDRAM Problems With Self-Powered USB Devices (HTML) ()
HW82: Alerts that non-compliant, self-powered USB devices plugged into a G4, can cause problems with low-voltage-sensitive SDRAM .
Human Interface Device & Force Feedback, USB 2003-08-21
Sending SCSI commands to storage devices (HTML) ()
QA1179: Explains that Mac OS X does not implement SCSI pass-through for many mass storage devices.
Fibre Channel, FireWire, Mass Storage Devices, Scanners, SCSI, USB 2002-08-06
Serial API Choice (HTML)
DV39: Discusses the choice of serial APIs supported by traditional Mac OS and Mac OS X.
Serial 2001-07-02
Sleep vs. Doze on Mac OS X (HTML)
QA1309: Discusses and demonstrates sleep versus doze detection on Machintosh Mac OS X
PCI and PC Card 2003-10-09
Switching between one and two machine mode for the Open Firmware user interface (HTML) ()
HW37: Explains how to change from one machine mode to two in the Open Firmware user interface.
Open Firmware 1999-02-15
T_DATA_REQ vs M_DATA TPI Message Blocks (HTML) ()
NW42: Explains why OT passes data to a TPI module using M_DATA message blocks instead of M_PROTO+T_DATA_REQ.
Networking 1996-10-25
TCP/IP Option Sizes (HTML) ()
NW62: Enumerates the TCP/IP options and their sizes for Open Transport.
Networking 1999-04-26
Tips on USB driver matching for Mac OS X (HTML)
QA1076: Gives some tips on getting USB driver matching to work.
USB 2001-10-02
Using "words" in Open Firmware (HTML)
HW73: Explains how to search for specific entries within all the global and local Open Firmware words.
Open Firmware, PCI and PC Card 1999-10-11
Was that a path I just saw? (HTML)
HW101: Describes the Open Firmware path that is occasionally shown at boot time.
PCI and PC Card 2000-10-06
What are configuration variables in Open Firmware? (HTML) ()
HW38: Defines the configuration variables in Open Firmware.
PCI and PC Card 1999-02-15
What are generic names in Open Firmware? (HTML) ()
HW34: Documents the generic names in Open Firmware.
Open Firmware, PCI and PC Card 1999-02-15
What is a CardBus host bus adapter HBA? (HTML)
HW79: Explains what a CardBus host bus adapter (HBA) is and discusses its implementation on the Macintosh.
PCI and PC Card 1999-11-15
What is a tokenizer? (HTML) ()
HW58: Defines a tokenizer.
Open Firmware, PCI and PC Card 1999-03-29
What is an Open Firmware devalias? (HTML)
HW99: Describes devaliases in Open Firmware.
PCI and PC Card 2000-10-06
What is an Open Firmware phandle, and why can't I access it from the Mac OS? (HTML)
HW76: Explains an "Open Firmware phandle" and why it is inaccessible from the Mac OS.
Open Firmware, PCI and PC Card 1999-11-15
What is the "dump" word and how do I use it? (HTML)
HW68: Describes the function of the Open Firmware word "dump" and how it can be used.
PCI and PC Card 1999-10-11
What is the return stack in Open Firmware and can I use it? (HTML)
HW67: Describes the purpose of the Open Firmware return stack and how developers can use it.
Open Firmware, PCI and PC Card 1999-10-11
What is unsolicited status? (HTML) ()
FW03: Explains the meaning and usage of the SBP-2 unsolicited status message.
FireWire 1999-05-17
What numeric base is the default for the Open Firmware user interface? (HTML)
HW65: Describes how the default numeric base used by the Open Firmware user interface is hexadecimal.
PCI and PC Card 1999-10-11
When to use PCMCIA, PC Card, and CardBus (HTML)
HW77: Explains the differences between PCMCIA, PC Card, and CardBus.
PCI and PC Card 1999-11-15
Which Machines Support Driver Services Library and the MP Nanokernel? (HTML) ()
HW63: Lists the systems that do and don't support the Driver Services Library and the MP Nanokernel.
Mass Storage Devices 1999-07-12
Why did the name of the PCI bridge change? (HTML) ()
HW59: Explains the name change of the PCI bridge to the generic name "pci" in Open Firmware.
PCI and PC Card 1999-03-29
Why didn't I boot from the CD? (HTML)
HW98: Describes the behavior of holding down the "c" key at boot time.
PCI and PC Card 2000-10-06
Why does logging keep my Printer Module from working? (HTML) ()
Deprecated - QA1182: Describes some problems with standard printf logging in a Printer Module on Jaguar.
Printing 2002-11-06
Why don't all of my PDE localizations show up in all applications? (HTML) ()
QA1185: Explains why some PDE localizations might not appear in all applications.
Printing 2002-10-16
Workaround for Asynchronous SCSIAction Crashes (HTML) ()
Deprecated - QA1129: Explains how to workaround asynchronous SCSIAction crashes on Mac OS X.
SCSI 2002-03-21
Working with Configuration Variables (HTML) ()
QA1119: Explains how to delete a specific Open Firmware configuration variable without using Command-Option-P-R.
PCI and PC Card 2002-02-13